﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MJM.RPP.EntidadesNegocio;
using MJM.SPP.EntidadesNegocio;
using MJM.Principal;


namespace wRegPadron.frmOpciones
{
    public partial class ucPermisoInterno : System.Web.UI.UserControl
    {
        protected static List<PersonaTramiteEN> lstPersonaTramiteEN = new List<PersonaTramiteEN>();
        protected static int IdArea;
        protected static int IdGrupo;

        public void SetAreaPersona(int id)
        {
            IdArea = id;
        }

        public void SetIdGrupo(int id)
        {
            IdGrupo = id;
        }

        private void CargarTreeviewPermisos()
        {
            tvPermisos.Nodes.Clear();
            List<AccesoGrupoEN> lst1, lst2, lst3, lst4;
            GrupxUsuEN obj = new GrupxUsuEN();
            TreeNode nodo1, nodo2, nodo3, nodo;
            obj = MediadorCN.GetGrupxUsu().Obtener2(Session["Usuario"].ToString());
            IdGrupo = obj.USUGRU_P_inID;
            lst4 = MediadorCN.GetAccesoGrupo().Listar_Programa_Grupo(IdGrupo);
            int a,b,c,d;
            for (int h = 0; h < lst4.Count; h++)
            {
                nodo = new TreeNode();
                nodo.Text = lst4[h].PROMUN_chNOMPRO;
                nodo.Value = lst4[h].PROMUN_inID.ToString();
                nodo.ShowCheckBox = true;
                tvPermisos.Nodes.Add(nodo);
                lst1 = MediadorCN.GetAccesoGrupo().Listar_Modulos_Grupo(IdGrupo, lst4[h].PROMUN_inID);

                for (int i = 0; i < lst1.Count; i++)
                {
                    a=tvPermisos.Nodes.Count-1;
                    if (lst1[i].PERGRU_inACT == 1)
                    {
                        nodo1 = new TreeNode();
                        nodo1.Text = lst1[i].OPTGEN_chNOMMEN;
                        nodo1.Value = lst1[i].OPTGEN_P_inID.ToString();
                        tvPermisos.Nodes[a].ChildNodes.Add(nodo1);
                        lst2 = MediadorCN.GetAccesoGrupo().Listar_Opciones_Grupo(IdGrupo, lst1[i].OPTGEN_P_inID, 1);
                        for (int j = 0; j < lst2.Count; j++)
                        {
                            b=tvPermisos.Nodes[a].ChildNodes.Count-1;
                            if (lst2[j].PERGRU_inACT == 1)
                            {
                                nodo2 = new TreeNode();
                                nodo2.Text = lst2[j].SUBOPT_chNOMSOP;
                                nodo2.Value = lst2[j].SUBOPT_P_inID.ToString();
                                tvPermisos.Nodes[a].ChildNodes[b].ChildNodes.Add(nodo2);
                                lst3 = MediadorCN.GetAccesoGrupo().Listar_Controles_Grupo(IdGrupo, lst1[i].OPTGEN_P_inID, lst2[j].SUBOPT_P_inID, 1);
                                for (int z = 0; z < lst3.Count; z++)
                                {
                                    c = tvPermisos.Nodes[a].ChildNodes[b].ChildNodes.Count-1;
                                    nodo3 = new TreeNode();
                                    nodo3.Text = lst3[z].OPTCON_chNOMCON;
                                    nodo3.Value = lst3[z].OPTCON_P_inID.ToString();
                                    tvPermisos.Nodes[a].ChildNodes[b].ChildNodes[c].ChildNodes.Add(nodo3);
                                }
                            }

                        }
                    }
                }
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SubOpcionEN objSubOpcionEN = MediadorCN.GetSubOpcion().ObtenerTexto("MenuPermiso");
                lblTitulo.Text = objSubOpcionEN.SUBOPT_chNOMSOP;
                lblDescripcion.Text = objSubOpcionEN.SUBOPT_chDESSOP;
                lstPersonaTramiteEN = MediadorCN.GetPersonaTramite().Listar("", "", IdArea);
                PersonaTramiteEN objpersona = new PersonaTramiteEN();
                objpersona.NombrePersona = "";
                objpersona.Usuario = "0";
                lstPersonaTramiteEN.Insert(0, objpersona);
                ddlPersonal.DataSource = lstPersonaTramiteEN;
                ddlPersonal.DataTextField = "NombrePersona";
                ddlPersonal.DataValueField = "Usuario";
                ddlPersonal.DataBind();
                CargarTreeviewPermisos();

                for (int i = 0; i < 24; i++)
                    if (i > 9)
                        ddlHoraIni.Items.Add(i.ToString());
                    else
                        ddlHoraIni.Items.Add("0" + i.ToString());
                for (int i = 0; i < 24; i++)
                    if (i > 9)
                        ddlHoraFin.Items.Add(i.ToString());
                    else
                        ddlHoraFin.Items.Add("0" + i.ToString());
            }
        }

        protected void btnGuardar_Click(object sender, ImageClickEventArgs e)
        {
            lblMensajeGuardar.Text = "";
            bool dias = true;
            bool permisos=false;            
            try
            {
                Convert.ToInt32(txtDiasVig.Text);
            }
            catch
            {
                dias = false;
            }
            for (int i = 0; i < tvPermisos.Nodes.Count; i++)
            {
                if (tvPermisos.Nodes[i].Checked)
                    permisos = true;
            }

            if (ddlPersonal.SelectedIndex != 0)
            {
                if (permisos)
                {
                    if (cbDomingo.Checked || cbLunes.Checked || cbMartes.Checked || cbMiercoles.Checked || cbJueves.Checked || cbViernes.Checked || cbSabado.Checked)
                    {
                        if (Convert.ToInt32(ddlHoraIni.SelectedItem.Text) < Convert.ToInt32(ddlHoraFin.SelectedItem.Text))
                        {
                            if (dias)
                            {
                                int idGrupo = 0;
                                GrupoUsuariosEN objGrupoUsuariosEN = MediadorCN.GetGrupoUsuario().ObtenerGrupoPersonal(ddlPersonal.SelectedValue.ToString());

                                if (objGrupoUsuariosEN != null)
                                {
                                    MediadorCN.GetGrupoUsuario().Eliminar(objGrupoUsuariosEN.USUGRU_P_inID);
                                }

                                objGrupoUsuariosEN = new GrupoUsuariosEN();
                                objGrupoUsuariosEN.SEGU_inFLAELI = IdArea * 10;
                                objGrupoUsuariosEN.USUGRU_chDESGRU = ddlPersonal.SelectedItem.Text;
                                objGrupoUsuariosEN.USUGRU_chNOMGRU = ddlPersonal.SelectedValue.ToString();
                                objGrupoUsuariosEN.USUGRU_dtFECREG = DateTime.Now;
                                idGrupo = MediadorCN.GetGrupoUsuario().Insertar(objGrupoUsuariosEN);
                                AccesoGrupoEN objAccesoGrupoEN;
                                //DateTime.Today.DayOfWeek.ToString();
                                if (idGrupo > 0)
                                {
                                    for (int h = 0; h < tvPermisos.Nodes.Count; h++)
                                    {
                                        objAccesoGrupoEN = new AccesoGrupoEN();
                                        objAccesoGrupoEN.OPTGEN_P_inID = 0;
                                        objAccesoGrupoEN.SUBOPT_P_inID = 0;
                                        objAccesoGrupoEN.OPTCON_P_inID = 0;
                                        objAccesoGrupoEN.USUGRU_P_inID1 = idGrupo;
                                        objAccesoGrupoEN.PROMUN_inID = Convert.ToInt32(tvPermisos.Nodes[h].Value);
                                        if (tvPermisos.Nodes[h].Checked)
                                            objAccesoGrupoEN.PERGRU_inACT = 1;
                                        else
                                            objAccesoGrupoEN.PERGRU_inACT = 0;
                                        MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);

                                        for (int i = 0; i < tvPermisos.Nodes[h].ChildNodes.Count; i++)
                                        {
                                            objAccesoGrupoEN = new AccesoGrupoEN();
                                            objAccesoGrupoEN.PROMUN_inID = Convert.ToInt32(tvPermisos.Nodes[h].Value);
                                            objAccesoGrupoEN.OPTGEN_P_inID = Convert.ToInt32(tvPermisos.Nodes[h].ChildNodes[i].Value);
                                            objAccesoGrupoEN.SUBOPT_P_inID = 0;
                                            objAccesoGrupoEN.OPTCON_P_inID = 0;
                                            objAccesoGrupoEN.USUGRU_P_inID1 = idGrupo;
                                            if (tvPermisos.Nodes[h].ChildNodes[i].Checked && tvPermisos.Nodes[h].Checked)
                                                objAccesoGrupoEN.PERGRU_inACT = 1;
                                            else
                                                objAccesoGrupoEN.PERGRU_inACT = 0;
                                            MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);

                                            for (int j = 0; j < tvPermisos.Nodes[h].ChildNodes[i].ChildNodes.Count; j++)
                                            {
                                                objAccesoGrupoEN = new AccesoGrupoEN();
                                                objAccesoGrupoEN.PROMUN_inID = Convert.ToInt32(tvPermisos.Nodes[h].Value);
                                                objAccesoGrupoEN.OPTGEN_P_inID = Convert.ToInt32(tvPermisos.Nodes[h].ChildNodes[i].Value);
                                                objAccesoGrupoEN.SUBOPT_P_inID = Convert.ToInt32(tvPermisos.Nodes[h].ChildNodes[i].ChildNodes[j].Value);
                                                objAccesoGrupoEN.OPTCON_P_inID = 0;
                                                objAccesoGrupoEN.USUGRU_P_inID1 = idGrupo;
                                                if (tvPermisos.Nodes[h].ChildNodes[i].ChildNodes[j].Checked && tvPermisos.Nodes[h].ChildNodes[i].Checked)
                                                    objAccesoGrupoEN.PERGRU_inACT = 1;
                                                else
                                                    objAccesoGrupoEN.PERGRU_inACT = 0;
                                                MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);

                                                for (int z = 0; z < tvPermisos.Nodes[h].ChildNodes[i].ChildNodes[j].ChildNodes.Count; z++)
                                                {
                                                    objAccesoGrupoEN = new AccesoGrupoEN();
                                                    objAccesoGrupoEN.PROMUN_inID = Convert.ToInt32(tvPermisos.Nodes[h].Value);
                                                    objAccesoGrupoEN.OPTGEN_P_inID = Convert.ToInt32(tvPermisos.Nodes[h].ChildNodes[i].Value);
                                                    objAccesoGrupoEN.SUBOPT_P_inID = Convert.ToInt32(tvPermisos.Nodes[h].ChildNodes[i].ChildNodes[j].Value);
                                                    objAccesoGrupoEN.OPTCON_P_inID = Convert.ToInt32(tvPermisos.Nodes[h].ChildNodes[i].ChildNodes[j].ChildNodes[z].Value);
                                                    objAccesoGrupoEN.USUGRU_P_inID1 = idGrupo;
                                                    if (tvPermisos.Nodes[h].ChildNodes[i].ChildNodes[j].ChildNodes[z].Checked && tvPermisos.Nodes[h].ChildNodes[i].ChildNodes[j].Checked)
                                                        objAccesoGrupoEN.PERGRU_inACT = 1;
                                                    else
                                                        objAccesoGrupoEN.PERGRU_inACT = 0;
                                                    MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);
                                                }
                                            }
                                        }
                                    }
                                    GrupxUsuEN objGrupxUsuEN = new GrupxUsuEN();
                                    objGrupxUsuEN.USUASI_inFLAELI = 1;
                                    objGrupxUsuEN.USUGRU_P_inID = idGrupo;
                                    objGrupxUsuEN.USUPAD_P_chUSU = ddlPersonal.SelectedValue.ToString();
                                    GrupxUsuEN aux = MediadorCN.GetGrupxUsu().Obtener2(objGrupxUsuEN.USUPAD_P_chUSU);
                                    if (aux != null)
                                        MediadorCN.GetGrupxUsu().Eliminar(aux);
                                    int idAsig = MediadorCN.GetGrupxUsu().Insertar(objGrupxUsuEN);

                                    RestriccionUsuarioEN objRestriccionUsuarioEN = new RestriccionUsuarioEN();
                                    objRestriccionUsuarioEN.RESCUE_inHORINI = Convert.ToInt32(ddlHoraIni.SelectedItem.Text);
                                    objRestriccionUsuarioEN.RESCUE_inHORFIN = Convert.ToInt32(ddlHoraFin.SelectedItem.Text);
                                    objRestriccionUsuarioEN.RESCUE_inDIADOM = 0;
                                    objRestriccionUsuarioEN.RESCUE_inDIAJUE = 0;
                                    objRestriccionUsuarioEN.RESCUE_inDIALUN = 0;
                                    objRestriccionUsuarioEN.RESCUE_inDIADOM = 0;
                                    objRestriccionUsuarioEN.RESCUE_inDIAJUE = 0;
                                    objRestriccionUsuarioEN.RESCUE_inDIASAB = 0;
                                    objRestriccionUsuarioEN.RESCUE_inDIAVIE = 0;

                                    if (cbDomingo.Checked)
                                        objRestriccionUsuarioEN.RESCUE_inDIADOM = 1;
                                    if (cbJueves.Checked)
                                        objRestriccionUsuarioEN.RESCUE_inDIAJUE = 1;
                                    if (cbLunes.Checked)
                                        objRestriccionUsuarioEN.RESCUE_inDIALUN = 1;
                                    if (cbMartes.Checked)
                                        objRestriccionUsuarioEN.RESCUE_inDIAMAR = 1;
                                    if (cbMiercoles.Checked)
                                        objRestriccionUsuarioEN.RESCUE_inDIAMIE = 1;
                                    if (cbSabado.Checked)
                                        objRestriccionUsuarioEN.RESCUE_inDIASAB = 1;
                                    if (cbViernes.Checked)
                                        objRestriccionUsuarioEN.RESCUE_inDIAVIE = 1;

                                    objRestriccionUsuarioEN.USUPAD_P_chUSU = ddlPersonal.SelectedValue.ToString();
                                    string dia, mes;
                                    DateTime dt = DateTime.Now;
                                    if (Convert.ToInt32(ddlVigencia.SelectedValue) == 1)
                                        dt = DateTime.Now.AddDays(Convert.ToInt32(txtDiasVig.Text));
                                    if (Convert.ToInt32(ddlVigencia.SelectedValue) == 2)
                                        dt = DateTime.Now.AddDays(Convert.ToInt32(txtDiasVig.Text) * 7);
                                    if (Convert.ToInt32(ddlVigencia.SelectedValue) == 3)
                                        dt = DateTime.Now.AddMonths(Convert.ToInt32(txtDiasVig.Text));
                                    if (Convert.ToInt32(ddlVigencia.SelectedValue) == 4)
                                        dt = DateTime.Now.AddYears(Convert.ToInt32(txtDiasVig.Text));
                                    mes = dt.Date.Month.ToString();
                                    if (mes.Length < 2)
                                        mes = "0" + mes;

                                    dia = dt.Date.Day.ToString();
                                    if (dia.Length < 2)
                                        dia = "0" + dia;

                                    objRestriccionUsuarioEN.RESCUE_chFECCAD = dt.Year.ToString() + mes + dia;
                                    RestriccionUsuarioEN aux2 = MediadorCN.GetRestriccionUsuario().Obtener(objRestriccionUsuarioEN.USUPAD_P_chUSU);
                                    if (aux2 != null)
                                        MediadorCN.GetRestriccionUsuario().Eliminar(aux2);
                                    MediadorCN.GetRestriccionUsuario().Insertar(objRestriccionUsuarioEN);
                                    if (idAsig > 0)
                                    {
                                        lblMensajeGuardar.Text = "Se registró el permiso correctamente";
                                        cbDomingo.Checked = false;
                                        cbLunes.Checked = false;
                                        cbMartes.Checked = false;
                                        cbMiercoles.Checked = false;
                                        cbJueves.Checked = false;
                                        cbViernes.Checked = false;
                                        cbSabado.Checked = false;
                                        ddlPersonal.SelectedIndex = 0;
                                        ddlHoraFin.SelectedIndex = 0;
                                        ddlHoraIni.SelectedIndex = 0;
                                        txtDiasVig.Text = "";
                                        CargarTreeviewPermisos();
                                    }
                                }
                                else
                                {
                                    lblMensajeGuardar.Text = "No se pudo registrar los permisos";
                                    //CargarTreeviewPermisos();
                                }
                            }
                            else
                                lblMensajeGuardar.Text = "Ingrese el tiempo de vigencia del acceso al sistema";
                        }
                        else
                            lblMensajeGuardar.Text = "Ingrese un rango de horas válido";
                    }
                    else
                        lblMensajeGuardar.Text = "Seleccione al menos un día de la semana";
                }
                else
                    lblMensajeGuardar.Text = "Seleccione al menos un módulo de acceso";
            }
            else
                lblMensajeGuardar.Text = "Seleccione a la persona";
        }
    }
}